<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>instanceof and typeof</title>

    <script>
        /*
        instanceof  和  typeof 结合使用 
        JavaScript 中基本类型包含 undefined null boolean number string 以及 object 引用类型 
        typeof 是一个一元运算，放在一个运算数之前，运算数可以是任意类型。
        它返回值是一个字符串，该字符串说明运算数的类型。（typeof 运算符返回一个用来表示表达式的数据类型的字符串。 ）
        typeof其实就是判断参数是什么类型的实例，就一个参数
        typeof 一般只能返回如下几个结果："number"、"string"、"boolean"、"object"、"function" 和 "undefined"。
        */

        // 都是typeof 能够识别的 
        function testTypeOf(){
            var parma;
            var func = function (){
                alert('hello de long')
            }
            console.log(typeof (123));//typeof(123)返回"number" 
            console.log(typeof ("123"));//typeof("123")返回"string"
            console.log(typeof(true));  // "boolean"
            console.log(typeof(parma)); // "undefined"
            console.log(typeof(func));   // "function"

            var param1 = "string";
            var param2 = new Object();
            var param3 = 10;
            console.log(typeof(param1)+"\n"+typeof(param2)+"\n"+typeof(param3)); 
　　　　　    //　string object  number
            // 对象,数组和null typeof(x) = "object"   这里注意即使是 null 也是返回的 object  所以不要使用 typeof 去判断一个obj 是否存在 

        }

        function testTypeOfCannotUse(){
            
        }

        /*
            instanceof用来判断某个对象是否是另一个对象的实例,返回值是一个布尔值,例:
            var a ={};
            alert(a instanceof Object);       //true
            var a =[];
            alert(a instanceof Array);       //true
            需要注意的是,instanceof只能用来判断对象和函数,不能用来判断字符串和数字等,例:
            var a ="123";
            alert(a instanceof String);       //false
            var b=new String();
            alert(b instanceof String);      //true
        */
        function testInstanceOf(){
            // 
            var a = {

            }
            alert(a instanceof Object)  // true

            // 
            var b = []
            alert(b instanceof Array)  // true

            //
            var c = "hello"
            alert(c instanceof String)  // false    
            
            //
            var  d = new String()
            alert(d instanceof String)  // true

        }

    </script>
</head>
<body>
    <button onclick="testTypeOf()">测试typeOf</button>
    <button onclick="testInstanceOf()">测试instanceOf</button>
</body>
</html>